package com.company.cloud.oss.modules.cloud;

import java.io.File;
import java.io.InputStream;
import java.util.Date;

import cn.hutool.core.util.StrUtil;
import com.company.cloud.oss.modules.cloud.models.ImgInfoModel;
import com.company.cloud.oss.modules.cloud.models.ImgProcess2SaveModel;
import org.springframework.util.StringUtils;

import com.company.cloud.oss.config.OssConfig;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;

public abstract class CloudStorageService {

	OssConfig ossConfig;
	
	public CloudStorageService(OssConfig ossConfig) {
		this.ossConfig=ossConfig;
	}
	
	
	
	 /**
     * 文件路径
     * @param prefix 前缀
     * @param suffix 后缀
     * @return 返回上传路径
     */
    public String getPath(String prefix, String suffix) {
        //文件路径
        String path = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.objectId();
        if(StringUtils.hasText(prefix)){
            path = prefix + "/" + path;
        }
        return path + suffix;
    }

    /**
     * URL新增参数
     * */
    public String getUrlAddParam(String url,String parameters){
        if(url.indexOf("?")>0){
           return  StrUtil.format("{}&{}",url,parameters);
        }else{
            return StrUtil.format("{}?{}",url,parameters);
        }
    }

    /**
     * 文件上传
     * @param data    文件字节数组
     * @param path    文件路径，包含文件名
     * @return        返回http地址
     */
    public abstract String upload(byte[] data, String path);
    

    /**
     * 文件上传
     * @param data     文件字节数组
     * @param suffix   后缀
     * @return         返回http地址
     */
    public abstract String uploadSuffix(byte[] data, String suffix);

    /**
     * 文件上传
     * @param inputStream   字节流
     * @param path          文件路径，包含文件名
     * @return              返回http地址
     */
    public abstract String upload(InputStream inputStream, String path);

    /**
     * 文件上传
     * @param inputStream  字节流
     * @param suffix       后缀
     * @return             返回http地址
     */
    public abstract String uploadSuffix(InputStream inputStream, String suffix);
    
    /**
     * 文件删除
     * */
    public abstract void delete(String path);



    /**
     * 获取图片信息
     * @param  url:图片路径
     * */
    public abstract ImgInfoModel getImgInfo(String url);


    /**
     *
     * */
    public abstract ImgProcess2SaveModel process2SaveAs(String styleType, String sourceImage, String targetImage);
	
}
